$(function () {
    var role_datagrid = $("#role_datagrid");
    var role_dialog = $("#role_dialog");

    var allData = {};  //保存所有权限
    //角色列表初始化
    role_datagrid.datagrid({
        fit:true,
        url:"/role/list",
        fitColumns:true,
        pagination:true,
        rownumbers:true,
        striped:true,
        toolbar:"#tb",
        singleSelect:true,
        columns:[[
            {field:"ck",checkbox:true},  //显示多选框样式
            {field:"id", title:"编号", hidden:true},
            {field:"name", title:"角色名称", width:100},
            {field:"sn", title:"角色编号", width:100}
        ]]
    })
    //角色列表初始化-end

    //编辑或更新对话框
    role_dialog.dialog({
        width:600,
        height:500,
        buttons:"#bb",
        inline : true,
        draggable : true,
    	resizable : true,
        closed:true
    })

    //所有权限
    $("#allPermissions").datagrid({
        title:"系统权限",
        width:250,
        height:350,
        url:"/permission/queryDatas",
        rownumbers:true,
        fitColumns:true,
        columns:[[
            {field:"id", title:"编号", hidden:true},
            {field:"name", title:"权限名", width:100, align:'center'}
        ]],
        onClickRow:function(index, row){
            //单击删除一个
            $("#allPermissions").datagrid("deleteRow", index);
            //目标添加1个
            $("#selfPermissions").datagrid("appendRow", row);
        },
        onLoadSuccess:function(data){
        	//allData =  data;  //将加载的数据缓存起来
            //此方式是有问题, 原因: data的值传递  直接是地址赋值,修改时, allData也会发生, 应该采用拷贝方式
        	//true : 开启深拷贝
             allData = $.extend( true, {}, data);
        }
    })
    //自己拥有的权限
    $("#selfPermissions").datagrid({
        title:"自身权限",
        width:250,
        height:350,
        rownumbers:true,
        fitColumns:true,
        columns:[[
            {field:"id", title:"编号", hidden:true},
            {field:"name", title:"权限名", width:100, align:'center'}
        ]],
        onClickRow:function(index, row){
            //单击删除一个
            $("#selfPermissions").datagrid("deleteRow", index);
            //目标添加1个
            $("#allPermissions").datagrid("appendRow", row);
        },
        //数据加载成功之后, 执行去除重复的操作
        onLoadSuccess:function(data){
            //data 表示加载所有数据 格式: {total:2, rows:[...]}
            //1:获取自己拥有的权限, 转成id  等价: data.rows;
            var rows = $("#selfPermissions").datagrid("getRows");
            //迭代rows集合, 将每一个row的id返回, 封装  成一个id数组
            var ids = $.map(rows, function(row){
                return row.id;
            });
            
            //2:获取所有的权限数组集合
            var allRows = $("#allPermissions").datagrid("getRows");
            //3:迭代所有权限中的选项id判断是否在 ids 数组中 如果在删除
            for(var i = allRows.length-1; i >= 0; i--){
                //如果存在, 删除
                if($.inArray(allRows[i].id, ids) >= 0){
                    $("#allPermissions").datagrid("deleteRow", i);
                }
            }
        }

    })

    //响应函数集合对象
    var cmdObj = {
        //工具栏的刷新
        reload: function (){
            role_datagrid.datagrid("load");
        },
        //工具栏的编辑
        edit: function (){
            //判断是否选中数据
            var row = role_datagrid.datagrid("getSelected");
            if(!row){
                $.messager.alert('温馨提示',"请选择要编辑的数据");
                return;
            }
            //添加与编辑时将数据清空
            $("#role_form").form("clear");
            //部门名字不一样, 需要修改
            if(row.dept){
                row["dept.id"] = row.dept.id;
            }
            //角色自身数据回显: 同名原则
            $("#role_form").form("load", row);


            //弹框前, 左边框加载 缓存 数据(权限列表不是经常改动的)
            $("#allPermissions").datagrid("loadData", allData);

            //发起请求获取当前选中角色拥有权限
            //如何给datagrid加url
            var options = $("#selfPermissions").datagrid("options");
            //给datagrid加一个url路径, 用于加载数据
            options.url = "/permission/queryPermissionByRoleId?roleId=" + row.id;
            //加载右边框数据
            $("#selfPermissions").datagrid("load");

            //:设置标题
            role_dialog.dialog("setTitle", "角色编辑");
            //:弹框
            role_dialog.dialog("open");
        },
        //工具栏添加
        add:function (){
            //添加与编辑时将数据清空
            $("#role_form").form("clear");

            //弹框前, 加载缓存数据
            $("#allPermissions").datagrid("loadData", allData);

            //将自身权限清空
            $("#selfPermissions").datagrid("loadData", []);

            //:设置标题
            role_dialog.dialog("setTitle", "角色添加");
            //:弹框
            role_dialog.dialog("open");

        },
        //保存操作
        save:function () {
            var id = $("#roleId").val();
            var url =  "/role/save";
            if(id){
                url =  "/role/update";
            }
            $("#role_form").form('submit', {
                url: url,
                //提交之前做操作, return是false阻止表单提交
                onSubmit: function(param){
                    var rows = $("#selfPermissions").datagrid("getRows");
                    for(var i = 0; i < rows.length; i++){
                        param["permissions["+i+"].id"]= rows[i].id;
                    }
                },
                success: function (data) {
                    data = $.parseJSON(data);

                    if(!data.success){
                        $.messager.alert('温馨提示',data.msg);

                    }else{
                        //关闭框
                        role_dialog.dialog("close");
                        //刷新列表数据
                        role_datagrid.datagrid("load");
                    }
                }
            })
        },
        //工具栏删除
        remove: function (){
            //判断是否选中数据
            var row = role_datagrid.datagrid("getSelected");
            if(!row){
                $.messager.alert('温馨提示',"请选择要编辑的数据");
                return;
            }

            $.messager.confirm('确认','您确认想要执行这个操作？',function(r){
                if (r){
                    //1:发起请求修改状态
                    $.get("/role/delete",{id:row.id}, function(data){
                        if(data.success){
                            //2:刷新列表数据
                            role_datagrid.datagrid("load");
                        }else{
                            $.messager.alert('温馨提示',data.msg);
                        }
                    })
                }
            });
        },
        cancel:function (){
            role_dialog.dialog("close");
        }    
    }//end
    
    //调用
    $("a[data-cmd]").click(function(){
        var cmd = $(this).data("cmd");
        cmdObj[cmd]();
    })
})


